import time

import pytest
from selenium.webdriver.common.by import By

from page.page_index import index
from common.logger import logger


class Test:
    # 初始化操作
    def setup_class(self):
        logger.info("***管理界面——登录初始化***")
        self.index = index

    def teardown_class(self):
        logger.info("***管理界面——登录结束***")
        self.index.close()

    # 关闭alert弹窗
    @pytest.fixture()
    def alert_clear(self):
        yield
        logger.info("***点击登录——关闭弹窗***")
        self.index.base_alert_accept()  # 点击确定，关闭弹窗

    # 用例名称：test_SMP_login_001   登录成功用例
    def test_SMP_login_001(self):
        logger.info(f"***登录成功***  账号：{"byhy"} 密码：{"sdfsdf"}")
        self.index.index_login().login("byhy", "sdfsdf")
        # 断言标题包含 "E生活"
        assert "E生活" in self.index.driver.title
        # 登录成功后 存在标签名为nav的说明登录成功
        # assert self.index.base_finds(By.TAG_NAME,"nav") != []

    # 登录失败用例（用户名为空，正确密码）
    # @pytest.mark.xfail
    def test_SMP_login_002(self, alert_clear):
        logger.info(f"*** 登录失败（用户名为空，正确密码）*** 账号：{None} 密码：{"sdfsdf"}")
        self.index.base_back()
        self.index.index_login().clear_username_pwd()
        self.index.index_login().login(None, "sdfsdf")
        # 断言标题包含 "E生活"
        # assert "E生活" in self.index.driver.title
        # 断言 alert弹窗
        assert self.index.base_alert_text() in "请输入用户名"

    '''
    上面的002 和下面的用例测试步骤大部分是一样的，只是输入的数据（用户名、密码）不同，要检查的输出数据（错误提示）
        不同这批测试用例，就是典型的 可以用 数据驱动 方式进行自动化的用例。
    登录失败用例（用户名，密码为空）
    登录失败用例（正确的用户名，错误的密码：比正确的密码多一位）
    登录失败用例（正确的用户名，错误的密码：比正确的密码少一位）
    登录失败用例（错误用户名：比正确多一位，正确密码）
    登录失败用例（错误用户名：比正确少一位，正确密码）
    '''
    @pytest.mark.parametrize('username, pwd ,expect', [
        ('byhy', None, '请输入密码'),
        ('byhy', 'sdfsdf1', '登录失败： 用户名或者密码错误'),
        ('byhy', 'sdfsd', '登录失败： 用户名或者密码错误'),
        ('byhy1', 'sdfsdf', '登录失败： 用户名不存在'),
        ('byh', 'sdfsdf', '登录失败： 用户名不存在')
    ])
    def test_SMP_login_003(self, alert_clear, username, pwd, expect):
        logger.info(f"***登录失败——({expect})***  账号：{username} 密码：{pwd}")
        self.index.index_login().clear_username_pwd()
        self.index.index_login().login(username, pwd)
        time.sleep(.1)
        # 断言 alert弹窗
        assert self.index.base_alert_text() == expect